1. Field of the Invention
The present invention generally relates to synchronization of data. More specifically, the present invention relates to systems and methods that allow two or more copies of data to be synchronized so that changes made to one copy of the data can be identified, transferred and incorporated into the other copies of the data, while minimizing the processing and data transfer needed to accomplish the synchronization.
2. Description of Related Art
Computers are an important tool that allows individuals in many locations to access information at almost any time. In addition, computers can be used to perform a variety of tasks including communicating, calculating, documents handling, storing and retrieving information, imaging and entertaining. Significantly, computers can allow multiple parties to access and share information, and this is becoming increasingly vital to businesses and individuals. For example, information is often stored on a network to allow multiple users access to the same information. Access to the network is frequently provided by local area networks (LANs) at the office, or by modems when at home or traveling or other Internet connections.
With the increasing accessibility and sharing of information between multiple users, it is now more common than ever for multiple users to simultaneously or in tandem work on shared data objects such as word processing documents, spread sheets, electronic forms, electronic mail messages (E-mail), graphic images, or a variety of other such data objects. Because of the shared use of these data objects among multiple users, there arises a need for each user to keep all other users of the same data objects or the same set of data objects apprised of changes that are made locally by that user. Thus, all copies of the same data objects should be updated so that each user has access to the most current version. This process of updating the data objects is called synchronization and it includes transferring incremental changes (e.g., creation of new data objects, modification of existing data objects, or deletion of existing data objects) made at one location to one or more other locations so that each copy of the data objects is the same.
Conventional computer systems often include a network or enterprise of remote or locally connected servers, and each server includes a copy of the data objects or sets of data objects. The user may then access a copy of one or more of the shared data objects or sets of data objects stored on a server in order to gain access to the desired information. In particular, these conventional computer systems allow a user to make copies of the desired data objects or sets of data objects, and store those objects on a local computer such as a personal or lap top computer. The local computer could then be accessed and used when it was not connected to the network (i.e., the local computer is xe2x80x9clogged offxe2x80x9d the network). This allows the local computer to be used in any desired location, and the data objects could be used, modified, changed or deleted as desired by the user while the local computer was not connected to the network. For example, the user can read, move and delete E-mail messages on the local computer, and the network can simultaneously receive new E-mails or existing E-mails can be read, deleted or changed by other users. The local computer, however, will not be aware of the changes on the network, and the network will not be aware of the changes on the local computer, until the data is synchronized.
Conventional systems often synchronized the local computer and network by transferring entire sets of data from the data source to the data recipient. In particular, these known systems updated the data objects by copying the entire contents of the file with the data objects between the local computer and the server. Thus, for example, if the user was updating the calendar or E-mail programs, the entire contents of the calendar or E-mail file were often duplicated and transmitted because the system did not know which items were changed or modified. Disadvantageously, transferring the entire file is time consuming and inefficient because information that has not been changed is copied and transferred between the client to the server. Alternatively, the user had to manually identify the new or modified information so that these files could be updated to the computer or network. Disadvantageously, this required additional time and effort by the computer user and if many files were modified, this was often a tedious process.
Conventional systems also used the date and time stamp in an attempt to synchronize data objects stored in the local computer and on the network. In particular, the date and time that the local computer was disconnected from a network server was saved by the server. When the local computer was once again connected, the server would ask for all changes that occurred since the last time it was connected. Disadvantageously, this known system does not work well where copies of the data objects have to be copied from one server to another server. For example, when two or more servers are connected together, information is shared and transferred between the servers at predetermined intervals such as every 15 minutes. Accordingly, if the local computer was last connected to the network server at 11:30 a.m. and is currently reconnecting to the same network server at noon, then that server can ask the local computer for all changes that occurred since 11:30 a.m. Suppose the local computer disconnects at 12:05 p.m. and at 12:10 p.m. a change is received by the first server from a second server that occurred at 11:55 a.m. When the local computer reconnects to the first server, it will ask for changes that occurred after 12:05 p.m. and the 11:55 a.m. change will never be retrieved. Another drawback of this conventional system is it may not be able to retrieve all changes that previously occurred if the user connects to a different server. Thus, the user typically has to reconnect to the same server each time. Furthermore, this system is susceptible to problems caused by time changes and other related difficulties.
A need therefore exists for a system and method for synchronizing two or more copies of data that eliminates the above-described disadvantages and problems.
One aspect of the present invention is a system and method for synchronizing two or more copies of data. Preferably, the system and method synchronize incremental changes to the data such that each copy of the data is up-to-date. In particular, the system and method allows shared copies of the data between a mobile or local computer system and a computer network or server so that both the local computer and the server contain symmetrical, up-to-date copies of the data. Advantageously, the system and method provide multiple parties access to the same current data, and the data can be quickly and efficiently synchronized because only the changed data is updated.
Another aspect of the present invention is a generalized synchronization system and method that can be used with a wide variety of applications and programs. For example, the system and method may be used with any suitable data, data objects, databases, folders, systems, programs and the like. Additionally, the system and method can readily synchronize data between a client or local computer system, such as a laptop or portable computer, and a network including one or more servers. It will be appreciated that the term xe2x80x9cclient systemxe2x80x9d may refer to any system that desires to synchronize data with the network. It will also be appreciated that this synchronization can be performed over any suitable communication lines such as a data link, local area network (LAN), modem, etc.
Yet another aspect of the present invention is a system and method that allows data to be synchronized between two different machines, without copying or transferring data or even manifest that has not been changed. Preferably, the system and method allows data to be synchronized between a server machine and a client machine such that both have the most up-to-date data. The client machine may comprises any suitable machine such as a personal computer, portable computer, notebook computer, lap top computer, palm computer, embedded computer, personal data assistant (PDA), or the like. The server machine may comprise any suitable server or computer that can support HTTP and/or WebDAV protocols, and the server machine can be part of a network that includes other servers, computers, storage devices or other known devices. For simplicity, the client machine may be referred to as the client and the server machine maybe referred to as the server.
Advantageously, the system and method allows the same client to be connected to the same server, or the same client can be connected to different servers because the data is replicated among the servers. This allows the client to synchronize with any server and symmetrical information between the client and the server can be obtained. Thus, a client can be synchronized with any server from an arbitrary set of servers that have the same information replicated. Additionally, it will be understood that the system and method can be used with any number of clients and servers in any desired configuration.
Still another aspect of the present invention is a system and method that allows data to be readily synchronized between the client and the server so that both the client and the server have symmetrical, up-to-date data. Significantly, the client can be disconnected (i.e., xe2x80x9coff linexe2x80x9d) from the server and still have access to its data, and then the client can be reconnected to the server (i.e., xe2x80x9con linexe2x80x9d) and the data in both the server and the client are synchronized to the most current information. Therefore, neither the server nor the client will have out-of-date data that may inadvertently be accessed. Additionally, if new data is added, this new data will also be updated such that both the server and the client have symmetrical data. Significantly, because only the modified data is communicated between the client and the server, the synchronization process is very rapid.
Yet another aspect of the present invention is a system and method that uses an identifier to represent the state of the contents of a collection. Preferably, the identifier contains information about the state of a resource in the collection at a particular time, and this information is used to determine what, if any, changes occurred to that resource. Thus, instead of comparing the resources themselves to see if a change was made, the identifier can be used to simply and easily determine if a change was made to the resource.
Still another aspect of the present invention is a system and method that uses identifiers to determine if changes were made to one or more resources. Desirably, a different identifier is used to identify each relevant resource stored in the computer. Each identifier preferably includes a first portion that corresponds to a particular server and a second portion that includes a change number that is changed each time the underlying resource is modified. Advantageously, the identifier can be quickly and easily transferred between the server and the client because it is a small data stream. Significantly, time and resources are saved because only those resources that were changed are updated, and any resources that were unchanged are not updated, copied or transferred.
Another aspect of the present invention is a system and method that uses an identifier that is opaque or transparent to the client when synchronizing two or more copies of data between the client and a server. Because the identifier is opaque, the client does not have to use, create or manage the identifier. Additionally, the client does not have to understand anything about the format of the identifier because it merely stores and transmits the identifier. Further, the server can change the format of the identifier at any timexe2x80x94for example, to upgrade or change the server and this does not have any effect on the client because the identifier is opaque to the client. Advantageously, the opaque identifier allows the system and method to be compatible with a wide range of data and programs.
In yet another aspect of the present invention, the system and method includes sending a synchronization request along with a manifest from a local computer to a server. If this is the first time that the computer is synchronized, the manifest contains no information. Otherwise, the manifest contains information that indicates the current state of the resources stored at the local computer. In response, the server generates a new manifest that indicates the current state of the resources stored on the server. The server uses these manifests to determine if the resources need to be synchronized. The server then returns the new manifest to the client along with a copy of the resources to be synchronized.
One feature of the present invention is method of synchronizing two or more copies of data between two or more components, wherein one copy of the data is stored in a first component and another copy of the data is stored in a second component. The method includes the steps of generating a synchronization request, the synchronization request including an identifier which identifies the state of a collection of resources in the first component; communicating the synchronization request from the first component to the second component; generating an identifier for the second component which identifies the state of a collection of resources in the second component; and comparing the identifier for the first component with the identifier for the second component to determine specifically which resources are different from the resource in the first component.
Another feature of the present invention is a method of synchronizing two or more copies of data, one copy of the data is stored on a first machine and another copy of the data is stored on a second machine. The method includes generating a synchronization request at the first machine, the synchronization request including a first identifier that indicates the state of a collection of data at the first machine; communicating the synchronization request to the second machine; comparing the first identifier with a second identifier that indicates the state of a collection of data at the second machine to determine incremental changes between the data stored on the first machine and the data stored on the second machine; and transmitting only the incremental changes in the data between the first machine and the second machine so that the copies of the data are synchronized.
Still another feature of the present invention is a method of synchronizing two or more copies of data, one copy of the data being stored on a first machine and another copy of the data being stored on a second machine. The method includes transmitting a synchronization request from the first machine to the second machine, the synchronization request including a first manifest indicating the state of the data stored on the first machine; receiving the synchronization request and the first manifest at the second machine; comparing the first manifest with a second manifest indicating the state of the data stored on the second machine; identifying incremental changes in the copies of the data on the first machine and the second machine from the comparison of the first manifest and the second manifest; and communicating copies of the incremental changes between the first and second machines such that the copies of the data are synchronized
A further feature of the present invention is a method of synchronizing two or more copies of data, one copy of the data being stored on a first machine and another copy of the data being stored on a second machine. The method comprising the steps of communicating a synchronization request from the first machine to the second machine; comparing a first identifier that represents data stored on the first machine with a second identifier that represents data stored on the second machine to determine if the data needs to be synchronized; and communicating only the data the needs to be synchronized from the second machine to the first machine.
Yet another feature of the present invention is a method of synchronizing a second set of data with a first set of data that has had incremental changes made thereto. The incremental changes are made only to the first set of data and not the second set of data. The method comprising the steps of comparing a first manifest that indicates a current state of the first set of data with a second manifest that indicates a current state of the second set of data; determining the incremental changes in the first set of data that need to be synchronized with the second set of data based on the comparison of the first manifest and the second manifest; and communicating only those incremental changes in the first set of data with the second set of data so that the first set of data and the second set of data are synchronized.
Still another feature of the present invention is a computer-readable medium having computer-executable instructions for performing steps. The steps comprise communicating a synchronization request from a first machine to a second machine; receiving the synchronization request at the second machine; calculating a manifest that indicates the current state of a collection of resources in the second machine; comparing the manifest for the second machine with a manifest for the first machine, the manifest for the first machine indicating the current state of a collection of resources in the first machine; identifying incremental differences between the collection of the resources in the first machine and the second machine based upon the differences between the manifests: and communicating the incremental differences in the collection of resources between the second machine and the first machine so that the collection of resources in the first machine is synchronized with the collection of resources in the second machine.
Another feature of the present invention is a computer-readable medium having computer-executable instructions for performing steps. The steps comprise communicating a synchronization request from a first machine to a second machine, the synchronization request including a manifest indicating the current state of a collection of resources stored at the first machine; calculating a manifest indicating the current state of a collection of resources stored at the second machine; comparing the manifest for the first machine with the manifest for the second machine; determining the resources that need to be copied from the first machine and the second machine based on the comparison of the manifests; and communicating only those resources which need to be synchronized between the first machine and the second machine.
A further feature of the present invention is a method of synchronizing resources between a client machine and a server machine, wherein only resources that contain incremental changes are synchronized and resources than are unchanged are not synchronized. The method comprising the steps of connecting the client machine to the server to allow communication between the client machine and the server machine; copying appropriate resources from the server machine to the client machine; disconnecting the client machine from the server machine; reconnecting the client machine to the server machine; and synchronizing only the incremental changes to the resources between the client machine and the server machine.
Yet another feature of the present invention is a method of synchronizing a second copy of data with a first copy of the data. The first copy of the data includes incremental changes that have not been incorporated into the second copy of the data. The method comprises calculating a first identifier for the first copy of the data, the first identifier indicating the contents of the first copy of the data; calculating a second identifier for the second copy of the data, the second identifier indicating the contents of the second copy of the data; comparing the first identifier and the second identifier for controlling transfer of the incremental changes from the first copy of the data to the second copy of the data; and synchronizing the incremental changes from the first copy of the data to the second copy of the data.
Yet another feature of the present invention is a computer-readable medium having computer-executable instructions for performing steps. The steps comprise means for identifying the contents of a first collection of resources; means for identifying the contents of a second collection of resources; means for comparing the contents of the second collection of resources with the first collection of resources to determine incremental changes between the first and second collection of resources: and synchronizing the incremental changes between the first and second collection of resources.
A further feature of the present invention is a system for synchronizing a second copy of data located in second component with a first copy of the data located in a first component. The first copy of the data includes incremental changes that have not been incorporated into the second copy of the data. The system comprises a data transferring system and the data transferring systems comprises means for identifying the contents of a first collection of resources; means for identifying the contents of a second collection of resources; and means for comparing the contents of the second collection of resources with the first collection of resources to determine incremental changes between the first and second collection of resources; and means for synchronizing the incremental changes between the first and second collection of resources.
A benefit of the system and method for synchronizing copies of data is it saves time and computer resources because new or changed data is communicated only once between the server and the client. Thus, there are no multiple transfers of common data. Another benefit is the system and method can be used in diverse applications, including on different platforms, and it can be implemented on a wide variety of machines. Significantly, because it preferably uses standard HTTP and/or WebDAV protocols, this further increases its ease of use and availability for a wide variety of applications. Advantageously, because the system and method can be used with standard protocols such as HTTP, this provides general support for operation over the Internet, support for firewalls and the easy availability of code libraries that support it (including, for example, XML).
Another benefit is the synchronization of the data copies may take place automatically or when indicated by the user. For example, the system and method may be configured to automatically synchronize the information whenever the client is disconnecting from or connecting to the server. The system may also be configured to automatically synchronize the data after a predetermined time or at a user selected internal when the client is connected to the server. Alternatively, the user may manually select when the data is to be synchronized. Yet another benefit is not all the data has to be synchronized at one time. Instead, a first portion of the data may be synchronized first and a second portion of the data may be synchronized at a later date.
Further aspects, features and advantages of the present invention will become apparent from the detailed description of the preferred embodiments that follows.